package esmaltes.bean;

import java.io.Serializable;
import java.util.List;

import javax.inject.Inject;
import javax.inject.Named;
import javax.persistence.PersistenceException;

import esmaltes.model.Cor;
import esmaltes.repository.CorRepository;

@Named
@javax.faces.view.ViewScoped
public class CadastroConsultaEstiloBean extends TemplateBean implements Serializable {

	private static final long serialVersionUID = 1L;

	@Inject
	private CorRepository corRepository;
	
	private Cor cor = new Cor();
	
	private List<Cor> cores;
	
	private List<Cor> coresFiltradas;
		
	private Cor corSelecionada;

	public void salvar() {
		
		Cor corDescExistente = corRepository.buscaPorDescricao(this.cor.getDescricao());
		
		if (corDescExistente != null && !corDescExistente.equals(this.cor)) {
			super.showFacesMessage("Já existe uma cor com a descrição informada.", 1);
		} else {
			try {
				
				this.corRepository.guardar(cor);
				this.cor = new Cor();
				super.showFacesMessage("Registro salvo com sucesso!", 2);
				
				consulta();
				
			} catch (Exception e) {
				
				super.showFacesMessage("Erro ao tentar salvar o registro.", 1);
				System.err.println("Erro: " + e.getMessage());
				
				consulta();
				
			}
		}
		
	}
	
	public void excluir() {
		Cor corExclusao = corRepository.getManager().merge(corSelecionada);
		
		try {
			
			corRepository.remover(corExclusao);
			cores.remove(corSelecionada);
			super.showFacesMessage("Cor excluída com sucesso!", 2);
			
			consulta();
			
		} catch (PersistenceException pe) {
			
			super.showFacesMessage("Cor não pode ser excluída.", 1);
			System.err.println("Erro: " + pe.getMessage());
			
		} catch (Exception e) {
			
			super.showFacesMessage("Erro ao tentar excluir o registro.", 1);
			System.err.println("Erro: " + e.getMessage());
			
		}
		
	}

	public void consulta() {
		this.cores = corRepository.todos("cd_cor");
	}

	public Cor getCor() {
		return cor;
	}

	public void setCor(Cor cor) {
		this.cor = cor;
	}

	public List<Cor> getCores() {
		return cores;
	}

	public void setCores(List<Cor> cores) {
		this.cores = cores;
	}

	public List<Cor> getCoresFiltradas() {
		return coresFiltradas;
	}

	public void setCoresFiltradas(List<Cor> coresFiltradas) {
		this.coresFiltradas = coresFiltradas;
	}

	public Cor getCorSelecionada() {
		return corSelecionada;
	}

	public void setCorSelecionada(Cor corSelecionada) {
		this.corSelecionada = corSelecionada;
	}

}
